#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
打包配置文件
PyInstaller 打包配置
"""

import PyInstaller.__main__
import os
import platform


def create_executable():
    """创建可执行文件"""

    # 基本打包配置
    args = [
        'number_combination_generator.py',  # 主程序文件
        '--name=数字组合生成器',           # 生成的可执行文件名称
        '--windowed',                       # 无控制台窗口（GUI程序）
        '--onefile',                        # 生成单个文件
        '--clean',                          # 清理临时文件
        '--noconfirm',                      # 不询问确认

        # 图标设置（如果有的话）
        # '--icon=icon.ico',

        # 优化设置
        '--strip',                          # 移除调试信息
        '--distpath=dist',                  # 输出目录
        '--workpath=build',                 # 工作目录

        # 排除不必要的模块，减小文件大小
        '--exclude-module=matplotlib',
        '--exclude-module=numpy',
        '--exclude-module=pandas',
        '--exclude-module=scipy',
        '--exclude-module=sklearn',

        # 添加中文支持
        '--add-data=README.md;.',          # 包含说明文件
    ]

    # Windows特定设置
    if platform.system() == 'Windows':
        args.extend([
            '--version-file=version_info.txt',  # 版本信息文件
        ])

    print("开始打包程序...")
    print(f"打包参数: {args}")

    try:
        PyInstaller.__main__.run(args)
        print("打包完成！")
        print(f"生成的可执行文件位置: dist/数字组合生成器(.exe)")
    except Exception as e:
        print(f"打包失败: {e}")


def create_version_info():
    """创建Windows版本信息文件"""
    version_content = """
VSVersionInfo(
  ffi=FixedFileInfo(
    filevers=(1, 0, 0, 0),
    prodvers=(1, 0, 0, 0),
    mask=0x3f,
    flags=0x0,
    OS=0x40004,
    fileType=0x1,
    subtype=0x0,
    date=(0, 0)
  ),
  kids=[
    StringFileInfo(
      [
      StringTable(
        '080404b0',
        [StringStruct('Comments', '数字组合生成器 - 用于生成符合条件的数字组合')],
        [StringStruct('CompanyName', 'Personal Software')],
        [StringStruct('FileDescription', '数字组合生成器')],
        [StringStruct('FileVersion', '1.0.0.0')],
        [StringStruct('LegalCopyright', 'Copyright © 2024')],
        [StringStruct('OriginalFilename', '数字组合生成器.exe')],
        [StringStruct('ProductName', '数字组合生成器')],
        [StringStruct('ProductVersion', '1.0.0.0')]
      )
      ]
    ),
    VarFileInfo([VarStruct('Translation', [0x0804, 1200])])
  ]
)
"""

    with open('version_info.txt', 'w', encoding='utf-8') as f:
        f.write(version_content)

    print("已创建版本信息文件")


def print_packaging_instructions():
    """打印打包说明"""
    instructions = """
# 数字组合生成器 - 打包说明

## 环境要求
- Python 3.6 或更高版本
- Windows操作系统（用于生成.exe文件）

## 安装依赖
```bash
pip install pyinstaller
```

## 快速打包
运行以下命令直接打包：
```bash
python packaging_config.py
```

## 手动打包
1. 打开命令提示符或PowerShell
2. 导航到项目目录
3. 运行打包命令：
```bash
pyinstaller -F -w -n "数字组合生成器" -c number_combination_generator.py
```

参数说明：
- `-F` : 生成单个文件
- `-w` : 无控制台窗口（GUI程序）
- `-n` : 设置输出文件名
- `-c` : 生成控制台程序（调试用）

## 高级打包选项
```bash
pyinstaller --onefile --windowed --icon=icon.ico --name 数字组合生成器 number_combination_generator.py
```

## 打包后文件
- 生成的可执行文件位于 `dist/` 目录
- 将可执行文件复制到需要的位置即可运行

## 运行要求
- Windows 7 或更高版本
- 无需安装Python环境

## 文件清单
打包后应该包含：
- 数字组合生成器.exe (主程序)
- 如果有的话：程序图标、帮助文档等

## 故障排除
1. 如果打包后的程序无法运行，可以尝试移除 `-w` 参数重新打包，查看控制台错误信息
2. 确保程序中使用了正确的路径（相对路径而非绝对路径）
3. 如果遇到编码问题，确保文件都使用UTF-8编码
"""

    print(instructions)

    # 保存说明到文件
    with open('打包说明.md', 'w', encoding='utf-8') as f:
        f.write(instructions)
    print("已生成打包说明文件：打包说明.md")


if __name__ == "__main__":
    # 创建版本信息文件（Windows）
    if platform.system() == 'Windows':
        create_version_info()

    # 显示打包说明
    print_packaging_instructions()

    # 询问是否立即打包
    response = input("\n是否立即开始打包？(y/n): ").strip().lower()
    if response in ['y', 'yes', '是']:
        create_executable()
    else:
        print("您可以在准备好后手动运行 create_executable() 函数进行打包")